/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador;

import BD.MyException;
import Clases.Responsable;
import DAO.DAOResponsable;
import DAO.DAOTarea;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

/**
 *
 * @author ppr
 */
public class ControladorResponsable {

    private List<Responsable> responsables;
    private List<File> ls = new ArrayList<File>();

    public ControladorResponsable() {
        this.cargarResponsables();
    }

    public int registrar(Responsable r) {

        if (DAOResponsable.emailDisponible(r)) {
            if (DAOResponsable.cargarResponsable(r)) {
                return 0;
            } else {
                return -1;
            }
        } else {
            return 1;
        }
    }

    public String modificar(Responsable r) {
        if (DAOResponsable.modificarResponsable(r)) {
            return "Se modifico el responsable";
        } else {
            return "No se modifico el responsable";
        }
    }

    private boolean cargarResponsables() {
        try {
            responsables = DAOResponsable.getResponsable();
            return true;
        } catch (MyException e) {
            JOptionPane.showMessageDialog(null, "Se produjo un error.");
            return false;
        }
    }

    public TableModel modelResponsable(TableModel modelo) {
        DefaultTableModel model = (DefaultTableModel) modelo;
        //////
        int filas = modelo.getRowCount();
        for (int i = 0; filas > i; i++) {
            model.removeRow(0);
        }
        //////
        if (this.cargarResponsables()) {
            for (Responsable responsable : this.responsables) {
                String[] dato = {responsable.getNombre(), responsable.getApodo(), responsable.getEmail()};
                model.addRow(dato);
                ls.add(new File(responsable.getPathFoto()));
            }
        }
        return model;
    }

    public DefaultTableModel filtrar(TableModel modelo, String text) {
        DefaultTableModel model = (DefaultTableModel) modelo;
        int filas = modelo.getRowCount();
        for (int i = 0; filas > i; i++) {
            model.removeRow(0);
        }
        ls = new ArrayList<File>();
        //////
        String txt = text.toLowerCase();
        if (this.cargarResponsables()) {
            for (Responsable responsable : this.responsables) {
                if (responsable.getNombre().toLowerCase().contains(txt) || responsable.getApodo().toLowerCase().contains(txt)
                        || responsable.getEmail().toLowerCase().contains(txt)) {
                    String[] dato = {responsable.getNombre(), responsable.getApodo(), responsable.getEmail()};
                    model.addRow(dato);
                    ls.add(new File(responsable.getPathFoto()));
                }
            }
        }
        return model;
    }

    public List<File> getListadoFile() {
        return ls;
    }

    public String eliminarResponsable(int selectedRow) {
        Responsable res = this.responsables.get(selectedRow);
        try {
            if (!DAOTarea.existenRelaciones(res)) {
                if (DAOResponsable.eliminarResponsable(res)) {
                    return "Responsable eliminado.";
                } else {
                    return "No se pudo eliminar el responsable.";
                }
            } else {
                return "Existen tareas con este responsable.";
            }
        } catch (MyException e) {
            return "Se produjo un error.";
        }
    }

    public int getIdResponsableByIndex(int selectedRow) {
        return this.responsables.get(selectedRow).getId_Responsable();
    }

    public Responsable getResponsable(int id) {
        return DAOResponsable.getResponsableById(id);
    }

    public int modificarResponsable(Responsable respo) {
        try {
            if (DAOResponsable.emailDisponible(respo)) {
                if (DAOResponsable.modificarResponsable(respo)) {
                    return 0;
                } else {
                    return -1;
                }
            } else {//email no disponible
                return 1;
            }

        } catch (MyException e) {
            return -1;
        }

    }

    public int getIdResponsableByEmail(String email) {
        return DAOResponsable.getIdResponsableByEmail(email);
    }

    public String eliminarResponsable(String email) {
        Responsable res = DAOResponsable.getResponsableByEmail(email);
        try {
            if (!DAOTarea.existenRelaciones(res)) {
                if (DAOResponsable.eliminarResponsable(res)) {
                    return "Responsable eliminado.";
                } else {
                    return "No se pudo eliminar el responsable.";
                }
            } else {
                return "Existen tareas con este responsable.";
            }
        } catch (MyException e) {
            return "Se produjo un error.";
        }
    }
}
